package com.jungle.mvvm.sample.app;

import android.content.Context;
import android.support.multidex.MultiDex;

import com.jungle.mvvm.base.BaseApplication;
import com.jungle.mvvm.crash.CaocConfig;
import com.jungle.mvvm.net.BaseNetwork;
import com.jungle.mvvm.net.EnvLevel;
import com.jungle.mvvm.sample.BuildConfig;
import com.jungle.mvvm.sample.R;
import com.jungle.mvvm.sample.http.OKHttpUpdateHttpService;
import com.jungle.mvvm.sample.ui.main.MainActivity;
import com.jungle.mvvm.sample.util.PathUtil;
import com.jungle.mvvm.update.MyUpdateParser;
import com.jungle.mvvm.utils.KLog;
import com.jungle.mvvm.utils.ToastUtils;
import com.jungle.mvvm.utils.Utils;
import com.xuexiang.xupdate.XUpdate;
import com.xuexiang.xupdate.entity.UpdateError;
import com.xuexiang.xupdate.listener.OnUpdateFailureListener;

import skin.support.SkinCompatManager;
import skin.support.app.SkinCardViewInflater;
import skin.support.constraint.app.SkinConstraintViewInflater;
import skin.support.design.app.SkinMaterialViewInflater;

/**
 * 详细说明
 *
 * @author Daniel
 * @version V1.0
 * @date 2020/3/5 17:58
 */
public class MyApplication extends BaseApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        Utils.init(this);
        // 是否开启日志
        KLog.init(BuildConfig.DEBUG);

        // 设置网络环境
        if (BuildConfig.DEBUG) {
            BaseNetwork.init(EnvLevel.DEV);
        } else {
            BaseNetwork.init(EnvLevel.PROD);
        }

        // 初始化全局异常崩溃
        initCrash();
        // 内存泄漏检测
        // if (!LeakCanary.isInAnalyzerProcess(this)) {
        //     LeakCanary.install(this);
        // }

        PathUtil.createPath(getApplicationContext());

        XUpdate.get()
                //开启debug模式，可用于问题的排查
                .debug(false)
                //默认设置只在wifi下检查版本更新
                .isWifiOnly(false)
                //默认设置使用get请求检查版本
                .isGet(true)
                //默认设置非自动模式，可根据具体使用配置
                .isAutoMode(false)
                .setApkCacheDir(PathUtil.apkPath)
                .setIUpdateParser(new MyUpdateParser())
                //设置版本更新出错的监听
                .setOnUpdateFailureListener(new OnUpdateFailureListener() {
                    @Override
                    public void onFailure(UpdateError error) {
                        ToastUtils.showLong(error.toString());
                    }
                })
                //这个必须设置！实现网络请求功能。
                .setIUpdateHttpService(new OKHttpUpdateHttpService())
                //这个必须初始化
                .init(this);

        // 基础控件换肤初始化
        SkinCompatManager.withoutActivity(this)
                // material design 控件换肤初始化[可选]
                .addInflater(new SkinMaterialViewInflater())
                // ConstraintLayout 控件换肤初始化[可选]
                .addInflater(new SkinConstraintViewInflater())
                // CardView v7 控件换肤初始化[可选]
                .addInflater(new SkinCardViewInflater())
                // 关闭状态栏换肤，默认打开[可选]
                .setSkinStatusBarColorEnable(false)
                // 关闭windowBackground换肤，默认打开[可选]
                .setSkinWindowBackgroundEnable(false)
                .loadSkin();
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }

    private void initCrash() {
        CaocConfig.Builder.create()
                //背景模式,开启沉浸式
                .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT)
                //是否启动全局异常捕获
                .enabled(true)
                //是否显示错误详细信息
                .showErrorDetails(true)
                //是否显示重启按钮
                .showRestartButton(true)
                //是否跟踪Activity
                .trackActivities(true)
                //崩溃的间隔时间(毫秒)
                .minTimeBetweenCrashesMs(2000)
                //错误图标
                .errorDrawable(R.mipmap.ic_launcher)
                //重新启动后的activity
                .restartActivity(MainActivity.class)
                .apply();
    }
}
